home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
DEV
/
I-Z
/
Lex.cpt
/
Lex
/
STDIO_LEXLIB.π folder
/
MAPCH.C
< prev
next >
Wrap
Text File
|
1990-06-03
|
2KB
|
78 lines
/*
HEADER: CUG nnn.nn;
TITLE: LEX - A Lexical Analyser Generator
VERSION: 1.0 for IBM-PC
DATE: Jan 30, 1985
DESCRIPTION: A Lexical Analyser Generator. From UNIX
KEYWORDS: Lexical Analyser Generator YACC C PREP
SYSTEM: IBM-PC and Compatiables
FILENAME: MAPCH.C
WARNINGS: This program is not for the casual user. It will
be useful primarily to expert developers.
CRC: N/A
SEE-ALSO: YACC and PREP
AUTHORS: Scott Guthery 11100 leafwood lane Austin, TX 78750
COMPILERS: DESMET-C
REFERENCES: UNIX Systems Manuals
*/
/*
* Bob Denny 28-Aug-82 Move stdio dependencies to lexerr(), lexget(),
* lexech() and mapch(). This is one of 4 modules in
* lexlib which depend upon the standard I/O package.
* Scott Guthery 20-Nov-83 Adapt for IBM PC & DeSmet C
*/
/*
* mapch -- handle escapes within strings
*/
#define STDIO_LEXLIB
#include <stdio.h>
#include "lex.h"
extern SHORTINT yyline;
mapch(delim, esc)
int delim;
int esc;
{
register SHORTINT c, octv, n;
if ((c = lexchar())==delim)
return(EOF);
if (c==EOF || c=='\n') {
lexerror("Unterminated string");
ungetc(c, lexin);
return(EOF);
}
if (c!=esc)
return(c);
switch (c=lexchar()) {
case 't':
return('\t');
case 'n':
return('\n');
case 'f':
return('\f');
case '\"': case '\'':
return(c);
case 'e':
return('\e');
case 'p':
return(033);
case 'r':
return('\r');
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
octv = c-'0';
for (n = 1; (c = lexchar())>='0' && c<='7' && n<=3; n++)
octv = octv*010 + (c-'0');
ungetc(c, lexin);
return(octv);
case '\n':
yyline++;
return(mapch(delim, esc));
}
return(c);
}